﻿using System;
using System.Collections.Generic;
using System.Data.SqlClient;
using System.Linq;
using System.Text;
using DataTypes;

namespace Persistencia
{
    public class PersistenciaCoches
    {
        public void AltaCoche(DataCoche dataCoche)
        {
            AccesoBD accesoBD = new AccesoBD();
            //Creo un objeto Command.
            SqlConnection myConnection = accesoBD.ConectarBD(); 

            // Accedo al dataCoche
            string matricula = dataCoche.Matricula;
            string marca = dataCoche.Marca;
            string modelo = dataCoche.Modelo;
            int kms = dataCoche.Kms;
            string consulta = "INSERT INTO Coches (matricula, marca, modelo, kms) VALUES ('" + matricula + "','" + marca + "','" + modelo + "'," + kms +")";
            SqlCommand myCommand = new SqlCommand(consulta, myConnection);
            //Ejecucion del comando en el servidor de BD
            myCommand.ExecuteNonQuery();
            accesoBD.DesconectarBD(myConnection);
        }

        public void ModificarDatosCoche(DataCoche dataCocheNuevo, string matricula)
        {
            AccesoBD accesoBD = new AccesoBD();
            //Creo un objeto Command.
            SqlConnection myConnection = accesoBD.ConectarBD();
            int idCoche = obtenerIdCoche(matricula);

            string mat = dataCocheNuevo.Matricula;
            string marca = dataCocheNuevo.Marca;
            string modelo = dataCocheNuevo.Modelo;
            int kms = dataCocheNuevo.Kms;

            string consulta = "UPDATE Coches SET marca = '" + marca + "', matricula = '" + mat + "', modelo = '" + modelo + "', kms = " + kms +  " WHERE idCoche = " + idCoche + ";";

            SqlCommand myCommand = new SqlCommand(consulta, myConnection);
            //Ejecucion del comando en el servidor de BD
            myCommand.ExecuteNonQuery();
            accesoBD.DesconectarBD(myConnection);           
        }

        

        public void EliminarCoche(string matricula)
        {
            AccesoBD accesoBD = new AccesoBD();
            //Creo un objeto Command.
            SqlConnection myConnection = accesoBD.ConectarBD();

            string consulta = "delete from Coches where matricula = '" + matricula + "';";
            SqlCommand myCommand = new SqlCommand(consulta, myConnection);
            //Ejecucion del comando en el servidor de BD
            myCommand.ExecuteNonQuery();
            accesoBD.DesconectarBD(myConnection);
        }

        public DataCoche ObtenerDataCoche(string matricula)
        {
            AccesoBD accesoBD = new AccesoBD();
            //Creo un objeto Command.
            SqlConnection myConnection = accesoBD.ConectarBD();
            string consulta = "select marca, modelo, Kms from Coches where matricula = '" + matricula + "';";
            SqlCommand myCommand = new SqlCommand(consulta, myConnection);
            SqlDataReader objReader = myCommand.ExecuteReader();

            string marca = "";
            string modelo = "";
            int kms = 0;

            while (objReader.Read()){
                marca = Convert.ToString(objReader["marca"]);
                modelo = Convert.ToString(objReader["modelo"]);
                kms = Convert.ToInt32(objReader["Kms"]);
            }

            objReader.Close();
            accesoBD.DesconectarBD(myConnection);

            DataCoche dataCoche = new DataCoche(matricula, marca, modelo, kms);
            return dataCoche;
        }

        public bool ExisteDataCoche(string matricula)
        {
            bool existeCoche = false;
            AccesoBD accesoBD = new AccesoBD();
            //Creo un objeto Command.
            SqlConnection myConnection = accesoBD.ConectarBD();
            string consulta = "select * from Coches where matricula = '" + matricula + "';";
            SqlCommand myCommand = new SqlCommand(consulta, myConnection);
            SqlDataReader objReader = myCommand.ExecuteReader();
 
            while (objReader.Read() && !existeCoche) 
            {
                existeCoche = objReader != null;
            }
            objReader.Close();
            accesoBD.DesconectarBD(myConnection);
            return existeCoche;
        }

        public List<DataCoche> ListarCoches()
        {
            string matricula = "";
            string marca = "";
            string modelo = "";
            int Kms = 0;
            
            List<DataCoche> listaCoches = new List<DataCoche>();
            string consulta = "select matricula, marca, modelo, Kms from Coches;";
            AccesoBD accesoBD = new AccesoBD();
            //Creo un objeto Command.
            SqlConnection myConnection = accesoBD.ConectarBD();
            SqlCommand myCommand = new SqlCommand(consulta, myConnection);
            SqlDataReader objReader = myCommand.ExecuteReader();

            while (objReader.Read())
            {
                matricula = Convert.ToString(objReader["matricula"]);
                marca = Convert.ToString(objReader["marca"]);
                modelo = Convert.ToString(objReader["modelo"]);
                Kms = Convert.ToInt32(objReader["Kms"]);
                DataCoche coche = new DataCoche(matricula, marca, modelo, Kms);
                listaCoches.Add(coche);
            }
            objReader.Close();
            accesoBD.DesconectarBD(myConnection);
            return listaCoches;
        }

        /// -- M E T O S   A U X I L I A R E S
        public int obtenerIdCoche(string matricula)
        {
            int idCoche = 0;
            AccesoBD accesoBD = new AccesoBD();
            //Creo un objeto Command.
            SqlConnection myConnection = accesoBD.ConectarBD();

            string consulta = "select idCoche from Coches where matricula = '" + matricula + "';";
            SqlCommand myCommand = new SqlCommand(consulta, myConnection);
            SqlDataReader objReader = myCommand.ExecuteReader();
            while (objReader.Read())
            {
                idCoche = Convert.ToInt32(objReader["idCoche"]);
            }
            objReader.Close();
            accesoBD.DesconectarBD(myConnection);
            return idCoche;
        }

    }
}
